home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc™ Source Code / Storage / SUView.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-28  |  20.2 KB  |  759 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        SUView.cpp
  3.  
  4.     Contains:    Implementation of ODStorageUnitView class.
  5.  
  6.     Owned by:    Vincent Lo
  7.  
  8.     Copyright:    © 1994 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.         <14>     10/8/95    TJ        Fixes Recomended by Refball
  13.         <13>      8/3/95    RR        #1257260: Collapse B classes. Remove
  14.                                     somInit methods. Don't call IsInitialized
  15.                                     or SubclassResponsibility
  16.         <12>     6/16/95    VL        1259613: SetOffset should call _fSU.
  17.         <11>     5/26/95    VL        1251403: Multithreading naming support.
  18.         <10>     5/19/95    VL        1249626: in length and out byteArray for
  19.                                     GetValue and GetPromiseValue.
  20.          <9>     4/24/95    VL        1234914: Changed ODStorageUnitID to ODID in
  21.                                     CloneInto. Changed in to out for
  22.                                     GetPromiseValue.
  23.          <8>     3/27/95    VL        1231412: Removed CopyTo.
  24.          <7>     1/26/95    VL        #???: SURef is not a 4-byte array.
  25.          <6>    12/20/94    VL        1195012: Make Storage calls be
  26.                                     marshallable.
  27.          <5>     8/26/94    VL        1183174: Sync up with latest SU API changes
  28.                                     for cloning (CloneInto & CloneTo).
  29.          <4>     8/11/94    VL        1180299: Sync up api with ODSTorageUnit for
  30.                                     object factories.
  31.          <3>     7/26/94    VL        Added IsValidStorageUnitRef.
  32.          <2>      7/5/94    VL        Fixed sourcePart parameter of
  33.                                     GetPromiseValue.
  34.          <1>     6/28/94    VL        first checked in
  35.  
  36.     To Do:
  37. */
  38.  
  39. #define ODStorageUnitView_Class_Source
  40. #define VARIABLE_MACROS
  41. #include <SUView.xih>
  42.  
  43. #ifndef SOM_ODStorageUnit_xh
  44. #include <StorageU.xh>
  45. #endif
  46.  
  47. #ifndef SOM_ODStorageUnitCursor_xh
  48. #include <SUCursor.xh>
  49. #endif
  50.  
  51. #ifndef _EXCEPT_
  52. #include "Except.h"
  53. #endif
  54.  
  55. #pragma segment SUView
  56.  
  57.  
  58. //=====================================================================================
  59. // SUViewLocker helper class
  60. //=====================================================================================
  61.  
  62. class SUViewLocker :public Destructo {
  63.     public:
  64.         SUViewLocker( Environment *, ODStorageUnitView * );
  65.         ~SUViewLocker( );
  66.     
  67.     private:
  68.         Environment *fEv;
  69.         ODStorageUnitView *fSUV;
  70. };
  71.  
  72. SUViewLocker::SUViewLocker( Environment *ev, ODStorageUnitView *suv )
  73. {
  74.     fEv = ev;
  75.     fSUV = kODNULL;        // Don't set fSUV until after Lock succeeds
  76.     suv->Lock(ev);        // so it won't be Unlocked if the Lock fails
  77.     fSUV = suv;
  78. }
  79.  
  80. SUViewLocker::~SUViewLocker( )
  81. {
  82.     ODStorageUnitView *suv = fSUV;
  83.     fSUV = kODNULL;        // In case destructor is called twice
  84.     if( suv )
  85.         suv->Unlock(fEv);
  86. }
  87.  
  88.  
  89. //=====================================================================================
  90. // ODStorageUnitView
  91. //=====================================================================================
  92.  
  93. SOM_Scope void  SOMLINK ODStorageUnitViewInitStorageUnitView(ODStorageUnitView *somSelf, Environment *ev,
  94.         ODStorageUnit* storageUnit,
  95.         ODStorageUnitCursor* cursor)
  96. {
  97.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  98.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewInitStorageUnitView");
  99.  
  100.     SOM_TRY
  101.     
  102.     /* Moved from somInit. SOM itself sets fields to zero
  103.     _fSU = kODNULL;
  104.     _fCursor = kODNULL;
  105.     _fOffset = 0;
  106.     _fKey = kODNULL;
  107.     */
  108.     
  109.     _fSU = storageUnit;
  110.     _fCursor = cursor;
  111.     _fSU->Acquire(ev);
  112.     
  113.     SOM_CATCH_ALL
  114.     SOM_ENDTRY
  115. }
  116.  
  117. SOM_Scope ODStorageUnit*  SOMLINK ODStorageUnitViewGetStorageUnit(ODStorageUnitView *somSelf, Environment *ev)
  118. {
  119.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  120.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetStorageUnit");
  121.  
  122.     return _fSU;
  123. }
  124.  
  125. SOM_Scope ODStorageUnitCursor*  SOMLINK ODStorageUnitViewGetCursor(ODStorageUnitView *somSelf, Environment *ev)
  126. {
  127.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  128.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetCursor");
  129.  
  130.     return _fCursor;
  131. }
  132.  
  133. SOM_Scope ODStorageUnitView*  SOMLINK ODStorageUnitViewExternalize(ODStorageUnitView *somSelf, Environment *ev)
  134. {
  135.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  136.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewExternalize");
  137.  
  138.     SOM_TRY
  139.         SUViewLocker lock(ev,somSelf);
  140.         
  141.         _fSU->FocusWithCursor(ev,_fCursor);
  142.         _fSU->SetOffset(ev,_fOffset);
  143.         _fSU->Externalize(ev);
  144.         _fOffset = _fSU->GetOffset(ev);
  145.     SOM_CATCH_ALL
  146.     SOM_ENDTRY
  147.     
  148.     return somSelf;
  149. }
  150.  
  151. SOM_Scope ODStorageUnitView*  SOMLINK ODStorageUnitViewInternalize(ODStorageUnitView *somSelf, Environment *ev)
  152. {
  153.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  154.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewInternalize");
  155.  
  156.     SOM_TRY
  157.         SUViewLocker lock(ev,somSelf);
  158.         
  159.         _fSU->FocusWithCursor(ev,_fCursor);
  160.         _fSU->SetOffset(ev,_fOffset);
  161.         _fSU->Internalize(ev);
  162.         _fOffset = _fSU->GetOffset(ev);
  163.     SOM_CATCH_ALL
  164.     SOM_ENDTRY
  165.     
  166.     return somSelf;
  167. }
  168.  
  169. SOM_Scope ODID  SOMLINK ODStorageUnitViewGetID(ODStorageUnitView *somSelf, Environment *ev)
  170. {
  171.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  172.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetID");
  173.  
  174.     ODID                id;
  175.     
  176.     SOM_TRY
  177.         SUViewLocker lock(ev,somSelf);
  178.         
  179.         _fSU->FocusWithCursor(ev,_fCursor);
  180.         id = _fSU->GetID(ev);
  181.     SOM_CATCH_ALL
  182.     SOM_ENDTRY    
  183.  
  184.     return id;
  185. }
  186.  
  187. SOM_Scope ODStorageUnitName  SOMLINK ODStorageUnitViewGetName(ODStorageUnitView *somSelf, Environment *ev)
  188. {
  189.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  190.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetName");
  191.  
  192.     ODStorageUnitName    name;
  193.     
  194.     SOM_TRY
  195.         SUViewLocker lock(ev,somSelf);
  196.         
  197.         _fSU->FocusWithCursor(ev,_fCursor);
  198.         name = _fSU->GetName(ev);
  199.     SOM_CATCH_ALL
  200.     SOM_ENDTRY    
  201.     
  202.     return name;
  203. }
  204.  
  205. SOM_Scope void  SOMLINK ODStorageUnitViewSetName(ODStorageUnitView *somSelf, Environment *ev,
  206.         ODStorageUnitName name)
  207. {
  208.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  209.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewSetName");
  210.  
  211.     SOM_TRY
  212.         SUViewLocker lock(ev,somSelf);
  213.         
  214.         _fSU->FocusWithCursor(ev,_fCursor);
  215.         _fSU->SetName(ev,name);
  216.     SOM_CATCH_ALL
  217.     SOM_ENDTRY    
  218. }
  219.  
  220. SOM_Scope ODStorageUnitView*  SOMLINK ODStorageUnitViewAddProperty(ODStorageUnitView *somSelf, Environment *ev,
  221.         ODPropertyName propertyName)
  222. {
  223.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  224.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewAddProperty");
  225.  
  226.     SOM_TRY
  227.         SUViewLocker lock(ev,somSelf);
  228.         
  229.         _fSU->FocusWithCursor(ev,_fCursor);
  230.         _fSU->AddProperty(ev,propertyName);
  231.     SOM_CATCH_ALL
  232.     SOM_ENDTRY
  233.     
  234.     return somSelf;
  235. }
  236.  
  237. SOM_Scope ODStorageUnitView*  SOMLINK ODStorageUnitViewAddValue(ODStorageUnitView *somSelf, Environment *ev,
  238.         ODValueType type)
  239. {
  240.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  241.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewAddValue");
  242.  
  243.     SOM_TRY
  244.         SUViewLocker lock(ev,somSelf);
  245.         
  246.         _fSU->FocusWithCursor(ev,_fCursor);
  247.         _fSU->AddValue(ev,type);
  248.         _fOffset = _fSU->GetOffset(ev);
  249.     SOM_CATCH_ALL
  250.     SOM_ENDTRY    
  251.     
  252.     return somSelf;
  253. }
  254.  
  255. SOM_Scope ODStorageUnitView*  SOMLINK ODStorageUnitViewRemove(ODStorageUnitView *somSelf, Environment *ev)
  256. {
  257.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  258.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewRemove");
  259.  
  260.     SOM_TRY
  261.         SUViewLocker lock(ev,somSelf);
  262.         
  263.         _fSU->FocusWithCursor(ev,_fCursor);
  264.         _fSU->Remove(ev);
  265.     SOM_CATCH_ALL
  266.     SOM_ENDTRY    
  267.  
  268.     return somSelf;
  269. }
  270.  
  271. SOM_Scope void  SOMLINK ODStorageUnitViewCloneInto(ODStorageUnitView *somSelf, Environment *ev,
  272.         ODDraftKey key,
  273.         ODStorageUnit* destStorageUnit,
  274.         ODID scopeID)
  275. {
  276.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  277.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewCloneInto");
  278.  
  279.     SOM_TRY
  280.         SUViewLocker lock(ev,somSelf);
  281.         
  282.         _fSU->FocusWithCursor(ev,_fCursor);
  283.         _fSU->CloneInto(ev,key, destStorageUnit, scopeID);
  284.     SOM_CATCH_ALL
  285.     SOM_ENDTRY    
  286. }
  287.  
  288. SOM_Scope ODPropertyName  SOMLINK ODStorageUnitViewGetProperty(ODStorageUnitView *somSelf, Environment *ev)
  289. {
  290.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  291.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetProperty");
  292.  
  293.     ODPropertyName    propertyName;
  294.     
  295.     SOM_TRY
  296.         SUViewLocker lock(ev,somSelf);
  297.         
  298.         _fSU->FocusWithCursor(ev,_fCursor);
  299.         propertyName = _fSU->GetProperty(ev);
  300.     SOM_CATCH_ALL
  301.         propertyName = kODNULL;
  302.     SOM_ENDTRY    
  303.     
  304.     return propertyName;
  305. }
  306.  
  307. SOM_Scope ODValueType  SOMLINK ODStorageUnitViewGetType(ODStorageUnitView *somSelf, Environment *ev)
  308. {
  309.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  310.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetType");
  311.  
  312.     ODValueType    valueType;
  313.     
  314.     SOM_TRY
  315.         SUViewLocker lock(ev,somSelf);
  316.  
  317.         _fSU->FocusWithCursor(ev,_fCursor);
  318.         valueType = _fSU->GetType(ev);
  319.     SOM_CATCH_ALL
  320.         valueType = kODNULL;
  321.     SOM_ENDTRY    
  322.     
  323.     return valueType;
  324. }
  325.  
  326. SOM_Scope void  SOMLINK ODStorageUnitViewSetType(ODStorageUnitView *somSelf, Environment *ev,
  327.         ODValueType valueType)
  328. {
  329.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  330.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewSetType");
  331.  
  332.     SOM_TRY
  333.         SUViewLocker lock(ev,somSelf);
  334.         
  335.         _fSU->FocusWithCursor(ev,_fCursor);
  336.         _fSU->SetType(ev,valueType);
  337.     SOM_CATCH_ALL
  338.     SOM_ENDTRY    
  339. }
  340.  
  341. SOM_Scope void  SOMLINK ODStorageUnitViewSetOffset(ODStorageUnitView *somSelf, Environment *ev,
  342.         ODULong offset)
  343. {
  344.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  345.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewSetOffset");
  346.  
  347.     SOM_TRY
  348.         SUViewLocker lock(ev,somSelf);
  349.         
  350.         _fOffset = offset;
  351.         _fSU->SetOffset(ev, offset);
  352.     
  353.     SOM_CATCH_ALL
  354.     SOM_ENDTRY
  355. }
  356.  
  357. SOM_Scope ODULong  SOMLINK ODStorageUnitViewGetOffset(ODStorageUnitView *somSelf, Environment *ev)
  358. {
  359.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  360.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetOffset");
  361.  
  362.      ODULong offset;
  363.     
  364.     SOM_TRY
  365.         SUViewLocker lock(ev,somSelf);
  366.  
  367.         offset = _fOffset;
  368.         //somSelf->Unlock(ev); //Adkins
  369.     
  370.     SOM_CATCH_ALL
  371.         offset = 0;
  372.     SOM_ENDTRY
  373.  
  374.     return offset;
  375. }
  376.  
  377. SOM_Scope ODULong  SOMLINK ODStorageUnitViewGetValue(ODStorageUnitView *somSelf, Environment *ev,
  378.         ODULong length,
  379.         ODByteArray* value)
  380. {
  381.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  382.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetValue");
  383.  
  384.     ODULong size;
  385.     
  386.     SOM_TRY
  387.         SUViewLocker lock(ev,somSelf);
  388.         
  389.         _fSU->FocusWithCursor(ev,_fCursor);
  390.         _fSU->SetOffset(ev,_fOffset);
  391.         size = _fSU->GetValue(ev, length, value);
  392.         _fOffset = _fSU->GetOffset(ev);
  393.     SOM_CATCH_ALL
  394.         size = 0;
  395.     SOM_ENDTRY
  396.     
  397.     return size;
  398. }
  399.  
  400. SOM_Scope void  SOMLINK ODStorageUnitViewSetValue(ODStorageUnitView *somSelf, Environment *ev,
  401.         ODByteArray* value)
  402. {
  403.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  404.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewSetValue");
  405.  
  406.     SOM_TRY
  407.         SUViewLocker lock(ev,somSelf);
  408.         
  409.         _fSU->FocusWithCursor(ev,_fCursor);
  410.         _fSU->SetOffset(ev,_fOffset);
  411.         _fSU->SetValue(ev,value);
  412.         _fOffset = _fSU->GetOffset(ev);
  413.     SOM_CATCH_ALL
  414.     SOM_ENDTRY    
  415. }
  416.  
  417. SOM_Scope void  SOMLINK ODStorageUnitViewInsertValue(ODStorageUnitView *somSelf, Environment *ev,
  418.         ODByteArray* value)
  419. {
  420.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  421.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewInsertValue");
  422.  
  423.     SOM_TRY
  424.         SUViewLocker lock(ev,somSelf);
  425.         
  426.         _fSU->FocusWithCursor(ev,_fCursor);
  427.         _fSU->SetOffset(ev,_fOffset);
  428.         _fSU->InsertValue(ev, value);
  429.         _fOffset = _fSU->GetOffset(ev);
  430.     SOM_CATCH_ALL
  431.     SOM_ENDTRY    
  432. }
  433.  
  434. SOM_Scope void  SOMLINK ODStorageUnitViewDeleteValue(ODStorageUnitView *somSelf, Environment *ev,
  435.         ODULong length)
  436. {
  437.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  438.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewDeleteValue");
  439.  
  440.     SOM_TRY
  441.         SUViewLocker lock(ev,somSelf);
  442.         
  443.         _fSU->FocusWithCursor(ev,_fCursor);
  444.         _fSU->SetOffset(ev,_fOffset);
  445.         _fSU->DeleteValue(ev,length);
  446.         _fOffset = _fSU->GetOffset(ev);
  447.     SOM_CATCH_ALL
  448.     SOM_ENDTRY    
  449. }
  450.  
  451. SOM_Scope ODULong  SOMLINK ODStorageUnitViewGetSize(ODStorageUnitView *somSelf, Environment *ev)
  452. {
  453.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  454.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetSize");
  455.  
  456.     ODULong    size;
  457.     
  458.     SOM_TRY
  459.         SUViewLocker lock(ev,somSelf);
  460.         
  461.         _fSU->FocusWithCursor(ev,_fCursor);
  462.         size = _fSU->GetSize(ev);
  463.     SOM_CATCH_ALL
  464.         size = 0;
  465.     SOM_ENDTRY
  466.     
  467.     return size;
  468. }
  469.  
  470. SOM_Scope ODBoolean  SOMLINK ODStorageUnitViewIsValidStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  471.         ODStorageUnitRef ref)
  472. {
  473.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  474.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewIsValidStorageUnitRef");
  475.  
  476.     ODBoolean    isValid;
  477.     
  478.     SOM_TRY
  479.         SUViewLocker lock(ev,somSelf);
  480.  
  481.         _fSU->FocusWithCursor(ev,_fCursor);
  482.         isValid = _fSU->IsValidStorageUnitRef(ev, ref);
  483.     SOM_CATCH_ALL
  484.         isValid = kODFalse;
  485.     SOM_ENDTRY
  486.     
  487.     return isValid;
  488. }
  489.  
  490. SOM_Scope void SOMLINK ODStorageUnitViewGetStrongStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  491.         ODStorageUnitID embeddedSUID,
  492.         ODStorageUnitRef ref)
  493. {
  494.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  495.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetStrongStorageUnitRef");
  496.  
  497.     SOM_TRY
  498.         SUViewLocker lock(ev,somSelf);
  499.         
  500.         _fSU->FocusWithCursor(ev,_fCursor);
  501.         _fSU->GetStrongStorageUnitRef(ev,embeddedSUID, ref);
  502.     SOM_CATCH_ALL
  503.     SOM_ENDTRY    
  504. }
  505.  
  506. SOM_Scope void  SOMLINK ODStorageUnitViewGetWeakStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  507.         ODStorageUnitID embeddedSUID,
  508.         ODStorageUnitRef ref)
  509. {
  510.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  511.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetWeakStorageUnitRef");
  512.  
  513.     SOM_TRY
  514.         SUViewLocker lock(ev,somSelf);
  515.         
  516.         _fSU->FocusWithCursor(ev,_fCursor);
  517.         _fSU->GetWeakStorageUnitRef(ev,embeddedSUID, ref);
  518.     SOM_CATCH_ALL
  519.     SOM_ENDTRY    
  520. }
  521.  
  522. SOM_Scope ODBoolean  SOMLINK ODStorageUnitViewIsStrongStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  523.         ODStorageUnitRef ref)
  524. {
  525.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  526.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewIsStrongStorageUnitRef");
  527.  
  528.     ODBoolean    strong;
  529.     
  530.     SOM_TRY
  531.         SUViewLocker lock(ev,somSelf);
  532.         
  533.         _fSU->FocusWithCursor(ev,_fCursor);
  534.         strong = _fSU->IsStrongStorageUnitRef(ev,ref);
  535.     SOM_CATCH_ALL
  536.         strong = kODFalse;
  537.     SOM_ENDTRY
  538.     
  539.     return strong;
  540. }
  541.  
  542. SOM_Scope ODBoolean  SOMLINK ODStorageUnitViewIsWeakStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  543.         ODStorageUnitRef ref)
  544. {
  545.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  546.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewIsWeakStorageUnitRef");
  547.  
  548.     ODBoolean    weak;
  549.     
  550.     SOM_TRY
  551.         SUViewLocker lock(ev,somSelf);
  552.         
  553.         _fSU->FocusWithCursor(ev,_fCursor);
  554.         weak = _fSU->IsWeakStorageUnitRef(ev,ref);
  555.     SOM_CATCH_ALL
  556.         weak = kODFalse;
  557.     SOM_ENDTRY
  558.     
  559.     return weak;
  560. }
  561.  
  562. SOM_Scope ODStorageUnitView*  SOMLINK ODStorageUnitViewRemoveStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  563.         ODStorageUnitRef ref)
  564. {
  565.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  566.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewRemoveStorageUnitRef");
  567.  
  568.     SOM_TRY
  569.         SUViewLocker lock(ev,somSelf);
  570.         
  571.         _fSU->FocusWithCursor(ev,_fCursor);
  572.         _fSU->RemoveStorageUnitRef(ev,ref);
  573.     SOM_CATCH_ALL
  574.     SOM_ENDTRY
  575.     
  576.     return somSelf;
  577. }
  578.  
  579. SOM_Scope ODStorageUnitID  SOMLINK ODStorageUnitViewGetIDFromStorageUnitRef(ODStorageUnitView *somSelf, Environment *ev,
  580.         ODStorageUnitRef ref)
  581. {
  582.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  583.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetIDFromStorageUnitRef");
  584.     
  585.     ODStorageUnitID    id;
  586.     
  587.     SOM_TRY
  588.         SUViewLocker lock(ev,somSelf);
  589.         
  590.         _fSU->FocusWithCursor(ev,_fCursor);
  591.         id = _fSU->GetIDFromStorageUnitRef(ev,ref);
  592.     SOM_CATCH_ALL
  593.         id = 0;
  594.     SOM_ENDTRY
  595.     
  596.     return id;
  597. }
  598.  
  599. SOM_Scope ODStorageUnitRefIterator*  SOMLINK ODStorageUnitViewCreateStorageUnitRefIterator(ODStorageUnitView *somSelf, Environment *ev)
  600. {
  601.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  602.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetStorageUnitRefIterator");
  603.  
  604.     ODStorageUnitRefIterator*    refIterator;
  605.     
  606.     SOM_TRY
  607.         SUViewLocker lock(ev,somSelf);
  608.         
  609.         _fSU->FocusWithCursor(ev,_fCursor);
  610.         refIterator =  _fSU->CreateStorageUnitRefIterator(ev);
  611.     SOM_CATCH_ALL
  612.         refIterator = kODNULL;
  613.     SOM_ENDTRY
  614.     
  615.     return refIterator;
  616. }
  617.  
  618. SOM_Scope ODULong  SOMLINK ODStorageUnitViewGetGenerationNumber(ODStorageUnitView *somSelf, Environment *ev)
  619. {
  620.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  621.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetGenerationNumber");
  622.  
  623.     ODULong    generationNumber;
  624.     
  625.     SOM_TRY
  626.         SUViewLocker lock(ev,somSelf);
  627.         
  628.         _fSU->FocusWithCursor(ev,_fCursor);
  629.         generationNumber = _fSU->GetGenerationNumber(ev);
  630.     SOM_CATCH_ALL
  631.         generationNumber = 0;
  632.     SOM_ENDTRY    
  633.     
  634.     return generationNumber;
  635. }
  636.  
  637. SOM_Scope ODULong  SOMLINK ODStorageUnitViewIncrementGenerationNumber(ODStorageUnitView *somSelf, Environment *ev)
  638. {
  639.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  640.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewIncrementGenerationNumber");
  641.  
  642.     ODULong    generationNumber;
  643.     
  644.     SOM_TRY
  645.         SUViewLocker lock(ev,somSelf);
  646.         
  647.         _fSU->FocusWithCursor(ev,_fCursor);
  648.         generationNumber = _fSU->IncrementGenerationNumber(ev);
  649.     SOM_CATCH_ALL
  650.         generationNumber = 0;
  651.     SOM_ENDTRY    
  652.  
  653.     return generationNumber;
  654. }
  655.  
  656. SOM_Scope ODBoolean  SOMLINK ODStorageUnitViewIsPromiseValue(ODStorageUnitView *somSelf, Environment *ev)
  657. {
  658.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  659.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewIsPromiseValue");
  660.  
  661.     ODBoolean result;
  662.  
  663.     SOM_TRY
  664.         SUViewLocker lock(ev,somSelf);
  665.         
  666.         _fSU->FocusWithCursor(ev,_fCursor);
  667.         result = _fSU->IsPromiseValue(ev);
  668.     SOM_CATCH_ALL
  669.         result = kODFalse;
  670.     SOM_ENDTRY
  671.  
  672.     return result;
  673. }
  674.  
  675. SOM_Scope void  SOMLINK ODStorageUnitViewSetPromiseValue(ODStorageUnitView *somSelf, Environment *ev,
  676.         ODValueType valueType,
  677.         ODULong offset,
  678.         ODByteArray* value,
  679.         ODPart* sourcePart)
  680. {
  681.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  682.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewSetPromiseValue");
  683.  
  684.     SOM_TRY
  685.         SUViewLocker lock(ev,somSelf);
  686.         
  687.         _fSU->FocusWithCursor(ev,_fCursor);
  688.         _fSU->SetPromiseValue(ev,valueType, offset, value, sourcePart);
  689.         _fOffset = _fSU->GetOffset(ev);
  690.     SOM_CATCH_ALL
  691.     SOM_ENDTRY    
  692. }
  693.  
  694. SOM_Scope ODULong  SOMLINK ODStorageUnitViewGetPromiseValue(ODStorageUnitView *somSelf, Environment *ev,
  695.         ODValueType valueType,
  696.         ODULong offset,
  697.         ODULong    length,
  698.         ODByteArray* value,
  699.         ODPart** sourcePart)
  700. {
  701.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  702.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewGetPromiseValue");
  703.  
  704.     ODULong numBytes;
  705.  
  706.     SOM_TRY
  707.         SUViewLocker lock(ev,somSelf);
  708.         
  709.         _fSU->FocusWithCursor(ev,_fCursor);
  710.         numBytes = _fSU->GetPromiseValue(ev,valueType, offset, length, value, sourcePart);
  711.         _fOffset = _fSU->GetOffset(ev);
  712.     SOM_CATCH_ALL
  713.         numBytes = 0;
  714.     SOM_ENDTRY
  715.  
  716.     return numBytes;
  717. }
  718.  
  719. SOM_Scope void  SOMLINK ODStorageUnitViewLock(ODStorageUnitView *somSelf, Environment *ev)
  720. {
  721.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  722.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewLock");
  723.  
  724.     SOM_TRY
  725.         _fKey = _fSU->Lock(ev,_fKey);
  726.     SOM_CATCH_ALL
  727.     SOM_ENDTRY
  728. }
  729.  
  730. SOM_Scope void  SOMLINK ODStorageUnitViewUnlock(ODStorageUnitView *somSelf, Environment *ev)
  731. {
  732.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  733.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewUnlock");
  734.  
  735.     SOM_TRY
  736.         _fSU->Unlock(ev,_fKey);
  737.     SOM_CATCH_ALL
  738.     SOM_ENDTRY
  739.     _fKey = kODNULL;
  740. }
  741.  
  742. SOM_Scope void  SOMLINK ODStorageUnitViewsomUninit(ODStorageUnitView *somSelf)
  743. {
  744.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  745.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewsomUninit");
  746.  
  747.     ODSafeReleaseObject(_fSU);
  748.     delete _fCursor;
  749. }
  750.  
  751. SOM_Scope ODSize  SOMLINK ODStorageUnitViewPurge(ODStorageUnitView *somSelf, Environment *ev,
  752.         ODSize size)
  753. {
  754.     ODStorageUnitViewData *somThis = ODStorageUnitViewGetData(somSelf);
  755.     ODStorageUnitViewMethodDebug("ODStorageUnitView","ODStorageUnitViewPurge");
  756.  
  757.     return 0;
  758. }
  759.